From 81e39938b340d6d78beaf49695883ba7e885d8eb Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Wed, 4 Feb 2004 01:18:45 +0000 Subject: [PATCH] (Fset_char_table_range): Handle charsets ascii, eight-bit-control, and eight-bit-graphic correctly. --- src/fns.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/fns.c b/src/fns.c index 493d7ba2897..c9e25ecf547 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2512,14 +2512,26 @@ character set, or a character code. Return VALUE. */) else if (SYMBOLP (range)) { Lisp_Object charset_info; + int charset_id; charset_info = Fget (range, Qcharset); - CHECK_VECTOR (charset_info); - - return Faset (char_table, - make_number (XINT (XVECTOR (charset_info)->contents[0]) - + 128), - value); + if (! VECTORP (charset_info) + || ! NATNUMP (AREF (charset_info, 0)) + || (charset_id = XINT (AREF (charset_info, 0)), + ! CHARSET_DEFINED_P (charset_id))) + error ("Invalid charset: %s", SYMBOL_NAME (range)); + + if (charset_id == CHARSET_ASCII) + for (i = 0; i < 128; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else if (charset_id == CHARSET_8_BIT_CONTROL) + for (i = 128; i < 160; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else if (charset_id == CHARSET_8_BIT_GRAPHIC) + for (i = 160; i < 256; i++) + XCHAR_TABLE (char_table)->contents[i] = value; + else + XCHAR_TABLE (char_table)->contents[charset_id + 128] = value; } else if (INTEGERP (range)) Faset (char_table, range, value); -- 2.30.2